package src.DisciplesPlan.链表;

// 结点
class ListNode {
    int val;
    ListNode next;
    ListNode(int x) {
        val = x;
        next = null;
    }

    ListNode(int x, ListNode next) {
        this.val = x;
        this.next = next;
    }
}

// 链表测试类
public class TestLinkedList {
    /**
     * 生成n个结点的链表(结点值为1,2...)
     * @param n
     * @return
     */
    public static ListNode generateLinkedList(int n) {
        // 头结点
        ListNode head = new ListNode(1);
        // 遍历指针
        ListNode p = head;
        for (int i = 1 ; i < n ; i++) {
            // 生成结点
            ListNode temp = new ListNode(i + 1);
            p.next = temp;
            p = p.next;
        }
        // 将最后一个结点的下一个结点置空
        p.next = null;
        return head;
    }

    /**
     * 生成n个结点的链表，结点值为传入的数组值
     * @param n
     * @param arr
     * @return
     */
    public static ListNode generateLinkedList(int n, int[] arr) {
        // 数组索引
        int index = 0;
        // 头结点
        ListNode head = new ListNode(arr[index]);
        // 遍历指针
        ListNode p = head;
        // 数组索引自增
        index++;
        for (int i = 1 ; i < n ; i++) {
            ListNode temp = new ListNode(arr[index]);
            p.next = temp;
            p = p.next;
            index++;
        }
        // 将最后一个结点的下一个结点置空
        p.next = null;
        return head;
    }


    /**
     * 展示链表
     * @param head
     */
    public static void showLinkedList(ListNode head) {
        ListNode p = head;
        while (p != null) {
            System.out.print(p.val + "->");
            p = p.next;
        }
        System.out.print("null");
        // 换行
        System.out.println();
    }
}
